home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / Random2.0 / RandomPlot / PointsView.m < prev    next >
Text File  |  1995-06-12  |  3KB  |  206 lines

  1. //
  2. // PointsView
  3. //
  4. // Copyright (C) 1992 Contemporary Design Studios.
  5. //
  6.  
  7.  
  8. #import "PointsView.h"
  9. #import "Random.h"
  10. #import "ElkinsEngine.h"
  11. #import <appkit/Button.h>
  12. #import <dpsclient/wraps.h>    /* for PSxxx functions */
  13.  
  14.  
  15. @implementation PointsView
  16.  
  17.  
  18. //
  19. // init
  20. //
  21.  
  22. - initFrame:(const NXRect *)frameRect
  23. {
  24.     [super initFrame:frameRect];
  25.     
  26.     randGen = [[Random alloc] initEngineInstance:[[ElkinsEngine alloc] init]];
  27.     initial = YES;
  28.     plottingPoints = YES;
  29.     
  30.     return self;
  31. }
  32.  
  33.  
  34. //
  35. // start:
  36. //
  37.  
  38. - start:sender
  39. {
  40.     int i;
  41.     
  42.     [startButton setEnabled:NO];
  43.     [stopButton setEnabled:YES];
  44.     
  45.     //
  46.     // Set up modal session:
  47.     //
  48.     
  49.     [NXApp beginModalSession:&mySession for:[self window]];
  50.     
  51.     //
  52.     // Run modal session:
  53.     //
  54.     
  55.     while([NXApp runModalSession:&mySession] != NX_RUNSTOPPED) {
  56.         if(plottingPoints) {
  57.         for(i = 0; i < 25; i++)
  58.         [self plotX:[randGen percent] y:[randGen percent]];
  59.         [self update];
  60.     }
  61.     else {
  62.         for(i = 0; i < 10; i++)
  63.         [self plotLine:[randGen percent] :[randGen percent]
  64.             :[randGen percent] :[randGen percent]];
  65.         [self update];
  66.     }
  67.     }
  68.     
  69.     return self;
  70. }
  71.  
  72.  
  73. //
  74. // stop:
  75. //
  76.  
  77. - stop:sender
  78. {
  79.     [stopButton setEnabled:NO];
  80.     [startButton setEnabled:YES];
  81.     
  82.     [NXApp stopModal];
  83.     
  84.     return self;
  85. }
  86.  
  87.  
  88. //
  89. // clear:
  90. //
  91.  
  92. - clear:sender
  93. {
  94.     [self lockFocus];
  95.     
  96.     PSsetgray(NX_WHITE);
  97.     NXRectFill(&bounds);
  98.     PSsetgray(NX_BLACK);
  99.     NXFrameRect(&bounds);
  100.     
  101.     [self unlockFocus];
  102.     
  103.     [self update];
  104.     
  105.     return self;
  106. }
  107.  
  108.  
  109. //
  110. // plotPoints:
  111. //
  112.  
  113. - plotPoints:sender
  114. {
  115.     plottingPoints = YES;
  116.     
  117.     return self;
  118. }
  119.  
  120.  
  121. //
  122. // plotLines:
  123. //
  124.  
  125. - plotLines:sender
  126. {
  127.     plottingPoints = NO;
  128.     
  129.     return self;
  130. }
  131.  
  132.  
  133. //
  134. // plotX:y:
  135. //
  136.  
  137. - plotX:(double)x y:(double)y
  138. {
  139. //    NXRect    myRect;
  140.     
  141. //    myRect.origin.x = bounds.origin.x + x * bounds.size.width;
  142. //    myRect.origin.y = bounds.origin.y + y * bounds.size.height;
  143. //    myRect.size.width = 1.0;
  144. //    myRect.size.height = 1.0;
  145.     
  146.     [self lockFocus];
  147.     
  148.     PSsetgray(NX_BLACK);
  149.     PSsetlinewidth(0.5);
  150.     PSmoveto(bounds.origin.x + x * bounds.size.width, bounds.origin.y + y * bounds.size.height);
  151.     PSrlineto(0.0, 0.0);
  152.     PSstroke();
  153.     
  154.     [self unlockFocus];
  155.     
  156.     return self;
  157. }
  158.  
  159.  
  160. //
  161. // plotLine::::
  162. //
  163.  
  164. - plotLine:(double)x1 :(double)y1 :(double)x2 :(double)y2
  165. {
  166.     [self lockFocus];
  167.     
  168.     PSsetgray(NX_BLACK);
  169.     PSsetlinewidth(1.0);
  170.     PSmoveto(bounds.origin.x + x1 * bounds.size.width, bounds.origin.y + y1 * bounds.size.height);
  171.     PSlineto(bounds.origin.x + x2 * bounds.size.width, bounds.origin.y + y2 * bounds.size.height);
  172.     PSstroke();
  173.     
  174.     [self unlockFocus];
  175.     
  176.     return self;
  177.     return self;
  178. }
  179.  
  180.  
  181. //
  182. // drawSelf::
  183. //
  184.  
  185. - drawSelf:(const NXRect *)rects :(int)rectCount
  186. {
  187.     if(initial) {
  188.     PSsetgray(NX_WHITE);
  189.     NXRectFill(&bounds);
  190.     initial = NO;
  191.     }
  192.     
  193.     PSsetgray(NX_BLACK);
  194.     NXFrameRect(&bounds);
  195.     
  196.     return self;
  197. }
  198.  
  199.  
  200.  
  201. @end
  202.  
  203.  
  204. //
  205. // End of file.
  206. //